<?php /** 发布试卷 api **/
require_once '../../config/req.conf.php';
require_once '../../utils/CommonMethods.php';
require_once '../../utils/VerifyFormData.php';
require_once '../../utils/DBUtils.php';

/* 1. token认证和角色权限校验 */
$headers = apache_request_headers(); // 请求头信息获取
$info = VerifyFormData::verifyRole($headers['Authorization'], "root");
if( CommonMethods::isEmpty($info) ){
    RespJson::fail("没有访问权限");
    return;
}

/* 2. 进行表单的验证 */
if( !VerifyFormData::issuePaperDataVerify($_POST) )return;

/* 3. 进行题目的存在验证 TODO 不知道需不需要对题型的规定 */
DBUtils::init();
foreach ($_POST['questions'] as $value){
    $has = DBUtils::queryOne(
        DBUtils::getSql("php_questions")
            ->where("id = {$value}")
            ->select()
    );
    if( CommonMethods::isEmpty($has) ){
        RespJson::fail("id为{$value}的题目不存在");
        return;
    }
}

/* 4. 创建一个考卷 */
$success = DBUtils::execute("INSERT INTO php_paper(title, startTime, endTime) VALUES('{$_POST['title']}', '{$_POST['startTime']}', '{$_POST['endTime']}')");
if( !$success ){
    RespJson::fail("创建新试卷失败, 请重试");
    return;
}
$paper = DBUtils::queryOne( // 获取到刚创建的试卷的id
    DBUtils::getSql("php_paper")
        ->filter("id")
        ->where("title = '{$_POST['title']}' and startTime = '{$_POST['startTime']}'")
        ->select()
);

/* 5. 进行题目的绑定 */
foreach ($_POST['questions'] as $value){ // 试卷 绑定 考题
    DBUtils::execute(
        "INSERT INTO php_paper_questions(pId, qId) VALUES({$paper['id']}, {$value})"
    );
}

/* 6. 进行考试用户的绑定(只有预约成功并且没有通过考试的人才可以进行下一步) */
$testUsers = DBUtils::queryMulti( // 获取可进行考试的所有用户
    DBUtils::getSql("php_user")
        ->filter("id")
        ->where("isPass = 0 and (status = 0 or status = 1)")
        ->select()
);
foreach ($testUsers as $user){ // 试卷绑定用户
    DBUtils::execute(
        "INSERT INTO php_user_paper(uId, pId) VALUES({$user['id']}, {$paper['id']})"
    );
}

/* 7. 上面的一切做完了以后就差不多了 */
RespJson::success();